#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <signal.h>
#include <linux/kd.h>
#include <sys/types.h>
#include <fcntl.h>

#ifndef CLOCK_TICK_RATE
  #define CLOCK_TICK_RATE 1193180
#endif
#define FREQ 40000 /*ultrasons a 40KHz*/

int console_fd=-1;
int init_beeper ();
void handle_signal (int signum);

int main () {
  signal(SIGINT, handle_signal);

  init_beeper();
  while (1)  /*Pour l'instant le seul moyen de sortir est un SIGINT*/ 
    sleep(90);

  ioctl(console_fd, KIOCSOUND, 0); /*On coupe le son*/
  return 0;
}

int init_beeper () {

  if((console_fd = open("/dev/tty8", O_WRONLY)) == -1) {
    fprintf(stderr, "Could not open /dev/tty8 for writing.\n");
    printf("\a"); /*Impossible de faire mieux, on sors alors un simple bip*/  
    perror("open");
    exit(1);
  }

  if(ioctl(console_fd, KIOCSOUND, (int)(CLOCK_TICK_RATE/FREQ)) < 0) {
    printf("\a"); /*Impossible de faire mieux, on sors alors un simple bip*/ 
    perror("ioctl");

  }
}

void handle_signal(int signum) {
  switch(signum) {
    case SIGINT:
      if(console_fd >= 0) {
         ioctl(console_fd, KIOCSOUND, 0);
         close(console_fd);
         exit(signum);
    } else {
        exit(signum);
    }
  }
}

